/**
 * Strategy Pattern
 * 策略模式(Strategy Pattern)：定义一系列算法，将每一个算法封装起来，并让它们可以相互替换。
 * 策略模式让算法独立于使用它的客户而变化，也称为政策模式(Policy)
 */
package behavioralpattern.strategypattern;

//策略模式是一个比较容易理解和使用的设计模式，策略模式是对算法的封装，它把算法的责任和算法本身分割开，委派给不同的对象管理。
// 策略模式通常把一个系列的算法封装到一系列的策略类里面，作为一个抽象策略类的子类。
// 用一句话来说，就是“准备一组算法，并将每一个算法封装起来，使得它们可以互换”。
//在策略模式中，应当由客户端自己决定在什么情况下使用什么具体策略角色。
//策略模式仅仅封装算法，提供新算法插入到已有系统中，以及老算法从系统中“退休”的方便，
// 策略模式并不决定在何时使用何种算法，算法的选择由客户端来决定。这在一定程度上提高了系统的灵活性，
// 但是客户端需要理解所有具体策略类之间的区别，以便选择合适的算法，这也是策略模式的缺点之一，
// 在一定程度上增加了客户端的使用难度